package date;

import java.text.SimpleDateFormat;
import java.time.ZoneId;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 日历类
 * <p>
 * 时区表示方式：
 * 一、一种是以GMT或者UTC加时区偏移表示，例如：GMT+08:00或者UTC+08:00表示东八区；
 * 二、另一种是缩写，例如，CST表示China Standard Time，也就是中国标准时间；
 * 三、后一种是以洲／城市表示，例如，Asia/Shanghai，表示上海所在地的时区。
 * <p>
 * Java标准库有两套处理日期和时间的API：
 * 一套定义在java.util这个包里面，主要包括Date、Calendar和TimeZone这几个类；
 * 一套新的API是在Java 8引入的，定义在java.time这个包里面，主要包括LocalDateTime、ZonedDateTime、ZoneId等
 *
 * @author <a href="mailto:sjj@jianzhimao.com">mojo</a>
 * copyright (C), 2013-2022, 广州九尾信息科技有限公司
 * @date 2022/12/21 9:48
 */
public class CalendarDemo {
    public static void main(String[] args) {

        Calendar instance = Calendar.getInstance(Locale.CHINA);
        System.out.println(instance.getTime());
        System.out.println(Calendar.getInstance(Locale.US).getTime());
        calendarBase();
        // timeZoneBase();
    }

    // timeZone抽象类基本用法
    private static void timeZoneBase() {
        TimeZone zone = TimeZone.getDefault();
        System.out.println(zone);
        TimeZone timeZone = TimeZone.getTimeZone(ZoneId.of("Asia/Shanghai"));
        System.out.println(timeZone);
        TimeZone zone1 = TimeZone.getTimeZone("America/New_York");
        TimeZone zone2 = TimeZone.getTimeZone("UTC+08:00");
        System.out.println(zone1);
        System.out.println(zone2);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(zone2);
        String format = sdf.format(Calendar.getInstance().getTime());
        System.out.println(">>>>" + format);
    }

    // Calendar抽象类基本用法
    private static void calendarBase() {
        Calendar calendar = Calendar.getInstance();
        System.out.println(calendar);
        // 获取年、月、日
        System.out.println(calendar.get(Calendar.YEAR));
        System.out.println(calendar.get(Calendar.MONTH) + 1);
        System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
        // 获取时分秒
        System.out.println(calendar.get(Calendar.HOUR));//12小时
        System.out.println(calendar.get(Calendar.HOUR_OF_DAY));//24小时
        System.out.println(calendar.get(Calendar.MINUTE));
        System.out.println(calendar.get(Calendar.SECOND));
        // 获取当前月第几周
        System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));
        System.out.println("=============================================");
        calendar.clear();
        // 设置时间
        calendar.set(Calendar.YEAR, 2022);
        calendar.set(Calendar.MONTH, 2);
        calendar.set(Calendar.DAY_OF_MONTH, 2);
        calendar.set(Calendar.HOUR_OF_DAY, 22);
        calendar.set(Calendar.MINUTE, 33);
        calendar.set(Calendar.SECOND, 44);
        System.out.println(calendar.getTime());

        // 时间操作
        calendar.add(Calendar.YEAR, 1);
        System.out.println(calendar.get(Calendar.YEAR));
    }
}
